package cn.ant.Client;

import cn.ant.utils.ChannelUtil;
import com.rabbitmq.client.Channel;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.LocalTime;


/**
 * 生产者（生产任务往队列推送）
 *
 * @author Anhui AntLaddie <a href="https://juejin.cn/user/4092805620185316">(掘金蚂蚁小哥)</a>
 * @version 1.0
 **/
public class Producer {

    // 通过日志管理器获取Logger对象
    static Logger logger = LogManager.getLogger(Producer.class);
    // 工作队列名称（消息分发测试）
    public static final String QUEUE_NAME = "QueuesMessageDistribution";

    public static void main(String[] args) throws IOException {
        //获取信道
        Channel channel = ChannelUtil.getChannel();
        //创建一个队列消息
        channel.queueDeclare(QUEUE_NAME, true, false, false, null);

        //第一种输入的发送方式
        //输入对象
        // Scanner scanner = new Scanner(System.in);
        // //循环发送消息到队列中
        // for (int i = 1; i <= 100; i++) {
        //     System.out.println("输入发送的消息：");
        // byte[] msg = ("这是一个编号为：" + scanner.next() + " 的待处理的消息")
        //         .getBytes(StandardCharsets.UTF_8);
        //     channel.basicPublish("", QUEUE_NAME, null, msg);
        // }

        //第二种循环的发送方式
        // 循环发送消息（循环10条发生）
        for (int i = 1; i <= 10; i++) {
            String str = "这是一条业务编号为：" + i + "的待处理的消息";
            byte[] msg = (str + LocalTime.now()).getBytes(StandardCharsets.UTF_8);
            channel.basicPublish("", QUEUE_NAME, null, msg);
        }
        logger.info("工作队列的生产者消息发送完成！");
    }
}
/*
    17:28:23.559 [main] INFO  cn.ant.Client.ConsumerA - 消费者A开始监听队列消息....
    17:28:25.765 [main] INFO  cn.ant.Client.ConsumerB - 消费者B开始监听队列消息....
    17:28:44.295 [main] INFO  cn.ant.Client.Producer - 工作队列的生产者消息发送完成！
    17:28:49.330 [pool-2-thread-4] INFO  cn.ant.Client.ConsumerA - ========================================================
    17:28:49.331 [pool-2-thread-4] INFO  cn.ant.Client.ConsumerA - A消费者获取队列信息并用时5秒完成处理：这是一条业务编号为：1的待处理的消息17:28:44.288448300
    17:28:54.326 [pool-2-thread-4] INFO  cn.ant.Client.ConsumerB - ========================================================
    17:28:54.327 [pool-2-thread-4] INFO  cn.ant.Client.ConsumerB - B消费者获取队列信息并用时10秒完成处理：这是一条业务编号为：2的待处理的消息17:28:44.290409900
    17:28:54.372 [pool-2-thread-5] INFO  cn.ant.Client.ConsumerA - ========================================================
    17:28:54.372 [pool-2-thread-5] INFO  cn.ant.Client.ConsumerA - A消费者获取队列信息并用时5秒完成处理：这是一条业务编号为：3的待处理的消息17:28:44.290409900
    17:28:59.401 [pool-2-thread-6] INFO  cn.ant.Client.ConsumerA - ========================================================
    17:28:59.401 [pool-2-thread-6] INFO  cn.ant.Client.ConsumerA - A消费者获取队列信息并用时5秒完成处理：这是一条业务编号为：5的待处理的消息17:28:44.290409900
    17:29:04.357 [pool-2-thread-5] INFO  cn.ant.Client.ConsumerB - ========================================================
    17:29:04.358 [pool-2-thread-5] INFO  cn.ant.Client.ConsumerB - B消费者获取队列信息并用时10秒完成处理：这是一条业务编号为：4的待处理的消息17:28:44.290409900
    17:29:04.419 [pool-2-thread-7] INFO  cn.ant.Client.ConsumerA - ========================================================
    17:29:04.420 [pool-2-thread-7] INFO  cn.ant.Client.ConsumerA - A消费者获取队列信息并用时5秒完成处理：这是一条业务编号为：6的待处理的消息17:28:44.290409900
    17:29:09.459 [pool-2-thread-8] INFO  cn.ant.Client.ConsumerA - ========================================================
    17:29:09.459 [pool-2-thread-8] INFO  cn.ant.Client.ConsumerA - A消费者获取队列信息并用时5秒完成处理：这是一条业务编号为：8的待处理的消息17:28:44.290926
    17:29:14.385 [pool-2-thread-6] INFO  cn.ant.Client.ConsumerB - ========================================================
    17:29:14.385 [pool-2-thread-6] INFO  cn.ant.Client.ConsumerB - B消费者获取队列信息并用时10秒完成处理：这是一条业务编号为：7的待处理的消息17:28:44.290926
    17:29:14.491 [pool-2-thread-9] INFO  cn.ant.Client.ConsumerA - ========================================================
    17:29:14.491 [pool-2-thread-9] INFO  cn.ant.Client.ConsumerA - A消费者获取队列信息并用时5秒完成处理：这是一条业务编号为：9的待处理的消息17:28:44.290926
    17:29:24.420 [pool-2-thread-7] INFO  cn.ant.Client.ConsumerB - ========================================================
    17:29:24.420 [pool-2-thread-7] INFO  cn.ant.Client.ConsumerB - B消费者获取队列信息并用时10秒完成处理：这是一条业务编号为：10的待处理的消息17:28:44.290926
 */